package com.ruoyi.lowcode.service;

import com.ruoyi.lowcode.domain.LcModel;
import com.ruoyi.lowcode.domain.bo.LcFieldBo;
import com.ruoyi.lowcode.domain.bo.ModelRowBo;
import com.ruoyi.lowcode.domain.bo.SelectListModelBo;
import com.ruoyi.lowcode.domain.vo.ExportModelVo;
import com.ruoyi.lowcode.domain.vo.FormModelFieldVo;
import com.ruoyi.lowcode.domain.vo.LcModelVo;
import com.ruoyi.lowcode.domain.bo.LcModelBo;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.core.domain.PageQuery;
import com.ruoyi.lowcode.domain.vo.ModelInfoVo;
import net.sf.jsqlparser.JSQLParserException;

import java.util.Collection;
import java.util.List;
import java.util.Map;

/**
 * 模型Service接口
 *
 * @author ruoyi
 * @date 2023-09-30
 */
public interface ILcModelService {

    List<ModelInfoVo> getModelSon(Long modelId);

    Boolean addOrUpdateModelRow(ModelRowBo modelRowBo) throws ClassNotFoundException;

    Boolean deleteModelRow(ModelRowBo modelRowBo) throws ClassNotFoundException;

    /**
     * 查询模型
     */
    LcModelVo queryById(Long modelId);

    /**
     * 初始化模型字段
     *
     * @param modelId
     * @return
     */
    Boolean initializationField(Long modelId);

    /**
     * 查询模型列表
     */
    TableDataInfo<LcModelVo> queryPageList(LcModelBo bo, PageQuery pageQuery);

    /**
     * 获取模型搜索参数，列表参数信息
     *
     * @param modelId
     * @return
     */
    ModelInfoVo getTableModel(Long modelId);

    List<FormModelFieldVo> getFormModelField(Long modelId);

    /**
     * 根据模型id获取数据列表
     *
     * @param selectListModelBo
     * @return
     */
    TableDataInfo<Map<String, Object>> selectListByModel(SelectListModelBo selectListModelBo) throws JSQLParserException, ClassNotFoundException;

    /**
     * 获取导出excel数据
     *
     * @param selectListModelBo
     * @return
     * @throws JSQLParserException
     * @throws ClassNotFoundException
     */
    ExportModelVo exportByModel(SelectListModelBo selectListModelBo) throws JSQLParserException, ClassNotFoundException;

    /**
     * 查询模型列表
     */
    List<LcModelVo> queryList(LcModelBo bo);

    /**
     * 新增模型
     */
    Boolean insertByBo(LcModelBo bo);

    /**
     * 修改模型
     */
    Boolean updateByBo(LcModelBo bo);

    /**
     * 校验并批量删除模型信息
     */
    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
}
